package br.com.damazzy.util.componentes
{
	import flash.events.Event;
	import flash.events.FocusEvent;
	
	import mx.controls.Alert;
	import mx.controls.DateField;
	import mx.events.CloseEvent;
	import mx.events.FlexEvent;
	import mx.events.ValidationResultEvent;
	import mx.formatters.DateFormatter;
	import mx.validators.DateValidator;

	[Event(name="change", type="flash.events.Event")]
	public class Data extends DateField {
		
		private var formatter: DateFormatter = new DateFormatter();
		private var validator: DateValidator = new DateValidator();
		private var vResult: ValidationResultEvent;
		private var dataValida: Boolean = true;
		private var _campoObrigatorio: Boolean = false;
		
		public function Data() {
			super();
			
			this.addEventListener(FlexEvent.CREATION_COMPLETE, init);
			this.addEventListener("change", dataChange);
			this.addEventListener(FocusEvent.FOCUS_OUT, validarData);
		}
		
		private function init(event: FlexEvent): void {
			
			formatter.formatString = "DD/MM/YYYY";
			
			this.restrict = "0-9/";
			this.formatString = "DD/MM/YYYY";
			this.yearNavigationEnabled = true;
			this.dayNames = new Array("D", "S", "T", "Q", "Q", "S", "S");
			this.monthNames = new Array("JANEIRO", "FEVEREIRO", "MARÇO", "ABRIL", "MAIO", "JUNHO", "JULHO", "AGOSTO", "SETEMBRO",
				"OUTUBRO", "NOVEMBRO", "DEZEMBRO");
			this.editable = true;
				
			validator.inputFormat = "DD/MM/YYYY";
			validator.source = this;
			validator.property = "text";
			validator.required = _campoObrigatorio;
			validator.wrongDayError = "O dia informado é inválido.";
			validator.wrongLengthError = "A data informada é inválida. Insira uma data no formato";
			validator.wrongMonthError = "O mês informado é inválido.";
			validator.wrongYearError = "O ano informado é inválido.";
			validator.requiredFieldError = "Este campo é de preenchimento obrigatório.";
			validator.formatError = "A data informada está em um formato inválido.";
			validator.invalidCharError = "Caractere inválido.";
		}
		
		private function dataChange(event: Event): void {
			
			if (this.text.length == 2 || this.text.length == 5) {
				this.text += "/";
			}
		}
		
		protected function validHandler_change(obj:Object):void {
			this.dispatchEvent(new Event("change"));
		}
		
		public function get dataFormatada(): String {
			var dataFormatada: String = null;
			
			if (this.selectedDate != null) {
				dataFormatada = formatter.format(this.selectedDate); 
			}
			
			return dataFormatada;
		}
		
		private function validarData(event: FocusEvent): void {
			
			if (this.text != null && this.text != "") {
				vResult = validator.validate();
			
				if (vResult.type == ValidationResultEvent.INVALID) {
					dataValida = false;
	                Alert.show("A data informada é inválida. Insira uma data no formato dd/mm/aaaa", "Erro!", 4, this, alertClose);
	            } else {
	            	dataValida = true;
	            }	
			}
		}
		
		private function alertClose(event: CloseEvent): void {
			this.setFocus();
		}
		
		public function set campoObrigatorio(vlr: Boolean): void {
			this._campoObrigatorio = vlr;
		}
	}
}